package com.yupi.springbootinit.statemachine.step;

import com.yupi.springbootinit.model.enums.StepEvent;
import com.yupi.springbootinit.model.enums.StepStatus;

import java.util.List;

/**
 * 版次步骤状态机接口（骨架）
 * 注：此接口目前未接入事务与持久化，仅做规则收敛与统一校验。
 */
public interface StepStateMachine {

    /**
     * 是否允许从 from 状态触发 event（含守卫校验）
     */
    boolean canTransit(StepStatus from, StepEvent event, StepTransitionContext ctx);

    /**
     * 计算从 from 触发 event 后的下一状态（不做落库）
     * 若非法流转，建议抛出 IllegalStateException
     */
    StepStatus transit(StepStatus from, StepEvent event, StepTransitionContext ctx);

    /**
     * 查询某状态下允许的事件集合（不含上下文强依赖的守卫，仅静态可达性）
     */
    List<StepEvent> allowedEvents(StepStatus from, StepTransitionContext ctx);
}